home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1995 June / MacFormat 25.iso / Shareware City / Developers / ICProgKit1.0 / Examples / Space Aliens / SpaceAliens.p < prev    next >
Text File  |  1994-10-29  |  5KB  |  189 lines

  1. program SpaceAliens;
  2.  
  3.     uses
  4.         EPPC, AppleEvents, 
  5.  
  6.         ICTypes, ICAPI, ICKeys, ICMappings, ICSubs;
  7.  
  8.     var
  9.         quitNow: boolean;
  10.         have_opened: boolean;
  11.         entries: Handle;
  12.  
  13.     function DoODoc (fss: FSSpec): OSErr;
  14.         var
  15.             err: OSErr;
  16.             ext: Str63;
  17.             info: FInfo;
  18.             entry: ICMapEntry;
  19.             posndx: longint;
  20.             ndx: integer;
  21.             found: boolean;
  22.     begin
  23.         err := noErr;
  24.         if Pos('.', fss.name) <> 0 then begin
  25.             ext := '';
  26.             ndx := length(fss.name);
  27.             while fss.name[ndx] <> '.' do begin
  28.                 ext := concat(fss.name[ndx], ext);
  29.                 ndx := ndx - 1;
  30.             end; (* while *)
  31.             ext := concat('.', ext);
  32.             posndx := 0;
  33.             found := false;
  34.             repeat
  35.                 err := ICMapErr(ICMGetEntry(entries, posndx, entry));
  36.                 if err = noErr then begin
  37.                     posndx := posndx + entry.total_length;
  38.                     found := (IUEqualString(entry.extension, ext) = 0);
  39.                 end; (* if *)
  40.             until found or (err <> noErr);
  41.             if found then begin
  42.                 err := HGetFInfo(fss.vRefNum, fss.parID, fss.name, info);
  43.                 if err = noErr then begin
  44.                     info.fdCreator := entry.file_creator;
  45.                     info.fdType := entry.file_type;
  46.                     err := HSetFInfo(fss.vRefNum, fss.parID, fss.name, info);
  47.                 end; (* if *)
  48.             end
  49.             else begin
  50.                 err := noErr;
  51.             end; (* if *)
  52.         end; (* if *)
  53.         quitNow := true;
  54.         DoODoc := err;
  55.     end; (* DoODoc *)
  56.  
  57.     function DoOApp: OSErr;
  58.     begin
  59.         quitNow := true;
  60.         DoOApp := noErr;
  61.     end;
  62.  
  63.     function DoQuit: OSErr;
  64.     begin
  65.         quitNow := true;
  66.         DoQuit := noErr;
  67.     end; (* DoQuit *)
  68.  
  69.     function GotRequiredParams (theAppleEvent: AppleEvent): OSErr;
  70.         var
  71.             typeCode: DescType;
  72.             actualSize: Size;
  73.             err: OSErr;
  74.     begin
  75.         err := AEGetAttributePtr(theAppleEvent, keyMissedKeywordAttr, typeWildCard, typeCode, nil, 0, actualSize);
  76.         if err = errAEDescNotFound then
  77.             GotRequiredParams := noErr
  78.         else if err = noErr then
  79.             GotRequiredParams := errAEEventNotHandled
  80.         else
  81.             GotRequiredParams := err;
  82.     end; (* GotRequiredParams *)
  83.  
  84.     function HandleOAPP (theAppleEvent, reply: AppleEvent; refcon: longint): OSErr;
  85.         var
  86.             oe: OSErr;
  87.     begin
  88.         oe := GotRequiredParams(theAppleEvent);
  89.         oe := DoOApp;
  90.         HandleOAPP := oe;
  91.     end;
  92.  
  93.     function HandleDocs (theAppleEvent, reply: AppleEvent; refcon: longint): OSErr;
  94.         var
  95.             myFSS: FSSpec;
  96.             docList: AEDescList;
  97.             index, itemsInList: longint;
  98.             actualSize: Size;
  99.             keywd: AEKeyword;
  100.             typeCode: descType;
  101.             ignoreWPtr: WindowPtr;
  102.             oe, ooe: OSErr;
  103.     begin
  104.         oe := AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, docList);
  105.         if oe = noErr then begin
  106.             ooe := GotRequiredParams(theAppleEvent);
  107. (* now get each alias from the list (as an FSSSpec) and open the associated file. *)
  108.             oe := AECountItems(docList, itemsInList);
  109.             for index := 1 to itemsInList do begin
  110.                 ooe := AEGetNthPtr(docList, index, typeFSS, keywd, typeCode, @myFSS, sizeof(myFSS), actualSize);
  111. (* coercion does alias->fsspec *)
  112.                 if ooe = noErr then
  113.                     ooe := DoODoc(myFSS);
  114.             end;
  115.             ooe := AEDisposeDesc(docList);
  116.         end;
  117.         HandleDocs := oe;
  118.     end; (* HandleDocs *)
  119.  
  120.     function HandleQUIT (theAppleEvent, reply: AppleEvent; refcon: longint): OSErr;
  121.         var
  122.             oe: OSErr;
  123.             errStr: Str255;
  124.             willQuit: Boolean;
  125.     begin
  126.         oe := GotRequiredParams(theAppleEvent);
  127.         oe := DoQuit;
  128.         HandleQUIT := oe;
  129.     end;
  130.  
  131.     function InitAppleEvents: OSErr;
  132.         var
  133.             aevtErr: OSErr;
  134.     begin
  135.         aevtErr := noErr;
  136.         if (aevtErr = noErr) then
  137.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, @HandleOAPP, 0, false);
  138.         if (aevtErr = noErr) then
  139.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, @HandleDocs, 0, false);
  140.         if (aevtErr = noErr) then
  141.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, @HandleQUIT, 0, false);
  142.         InitAppleEvents := aevtErr;
  143.     end;
  144.  
  145.     var
  146.         junkbool: boolean;
  147.         event: EventRecord;
  148.         err: OSErr;
  149.         junk: OSErr;
  150.         response: longint;
  151.         attr: longint;
  152.         instance: ICInstance;
  153. begin
  154.     if (Gestalt(gestaltSystemVersion, response) <> noErr) | (response < $700) then begin
  155.         ExitToShell;
  156.     end; (* if *)
  157.     err := InitAppleEvents;
  158.     if err = noErr then begin
  159.         err := ICMapErr(ICStart(instance, 'Sƒ†!'));
  160.         if err = noErr then begin
  161.             err := ICMapErr(ICFindConfigFile(instance, 0, nil));
  162.         end; (* if *)
  163.         if err = noErr then begin
  164.             err := ICMapErr(ICBegin(instance, icReadOnlyPerm));
  165.             if err = noErr then begin
  166.                 err := ICMapErr(ICGetPrefHandle(instance, kICMapping, attr, entries));
  167.                 junk := ICMapErr(ICEnd(instance));
  168.             end; (* if *)
  169.         end; (* if *)
  170.         if err = noErr then begin
  171.             quitNow := false;
  172.             while not quitNow do begin
  173.                 junkbool := WaitNextEvent(everyEvent, event, maxlongint, nil);
  174.                 case event.what of
  175.                     keyDown: 
  176.                         quitNow := true;
  177.                     kHighLevelEvent: 
  178.                         junk := AEProcessAppleEvent(event);
  179.                     otherwise
  180.                         ;
  181.                 end; (* case *)
  182.             end; (* while *)
  183.         end; (* if *)
  184.         junk := ICStop(instance);
  185.     end; (* if *)
  186.     if err <> noErr then begin
  187.         SysBeep(10);
  188.     end;
  189. end. (* SpaceAliens *)